const express = require('express');
const cors = require('cors');
const moment = require('moment');

const app = express();
const PORT = process.env.PORT || 3001;

// 中间件
app.use(cors());
app.use(express.json());

// 星座数据
const zodiacSigns = {
  '白羊座': { start: '03-21', end: '04-19' },
  '金牛座': { start: '04-20', end: '05-20' },
  '双子座': { start: '05-21', end: '06-21' },
  '巨蟹座': { start: '06-22', end: '07-22' },
  '狮子座': { start: '07-23', end: '08-22' },
  '处女座': { start: '08-23', end: '09-22' },
  '天秤座': { start: '09-23', end: '10-23' },
  '天蝎座': { start: '10-24', end: '11-22' },
  '射手座': { start: '11-23', end: '12-21' },
  '摩羯座': { start: '12-22', end: '12-31' },
  '水瓶座': { start: '01-20', end: '02-18' },
  '双鱼座': { start: '02-19', end: '03-20' }
};

// 运势数据
const fortuneMessages = {
  '白羊座': [
    '今天是充满活力的一天，适合开始新项目！',
    '你的热情会感染身边的人，保持积极态度。',
    '今天可能会遇到一些挑战，但你的勇气会帮助你克服。'
  ],
  '金牛座': [
    '今天适合稳步前进，不要急于求成。',
    '财运不错，但要谨慎投资。',
    '享受生活中的美好事物，放慢脚步。'
  ],
  '双子座': [
    '今天的沟通运势很好，适合社交活动。',
    '保持好奇心，可能会学到新知识。',
    '变化带来新机遇，拥抱不确定性。'
  ],
  '巨蟹座': [
    '今天适合关注家庭和内心感受。',
    '直觉敏锐，相信自己的第六感。',
    '情感丰富的一天，多与亲友交流。'
  ],
  '狮子座': [
    '今天是展现才华的好时机！',
    '自信心爆棚，但要避免过于骄傲。',
    '领导力得到认可，适合承担重要任务。'
  ],
  '处女座': [
    '今天适合整理和规划，注重细节。',
    '工作效率很高，但不要过于追求完美。',
    '健康运势不错，保持良好作息。'
  ],
  '天秤座': [
    '今天人际关系和谐，适合合作。',
    '美感敏锐，可以尝试艺术创作。',
    '平衡各方面需求，避免过度纠结。'
  ],
  '天蝎座': [
    '今天直觉力强，适合深入思考。',
    '神秘的事物吸引你，保持探索精神。',
    '情感深刻，但要控制占有欲。'
  ],
  '射手座': [
    '今天适合外出旅行或学习新事物。',
    '乐观的态度会带来好运。',
    '自由自在的一天，不要被束缚。'
  ],
  '摩羯座': [
    '今天适合制定长远计划。',
    '努力工作会有回报，坚持就是胜利。',
    '责任感强，但也要注意休息。'
  ],
  '水瓶座': [
    '今天充满创新思维，适合头脑风暴。',
    '独特的想法会得到认可。',
    '朋友运势佳，可能结识志同道合的人。'
  ],
  '双鱼座': [
    '今天想象力丰富，适合艺术创作。',
    '同情心强，可能会帮助他人。',
    '梦境可能有特殊含义，留意潜意识信息。'
  ]
};

// 计算星座
function getZodiacSign(birthday) {
  const date = moment(birthday);
  const monthDay = date.format('MM-DD');
  
  for (const [sign, period] of Object.entries(zodiacSigns)) {
    if (sign === '摩羯座') {
      // 摩羯座跨年特殊处理
      if (monthDay >= '12-22' || monthDay <= '01-19') {
        return sign;
      }
    } else if (sign === '水瓶座') {
      if (monthDay >= '01-20' && monthDay <= '02-18') {
        return sign;
      }
    } else {
      if (monthDay >= period.start && monthDay <= period.end) {
        return sign;
      }
    }
  }
  return '未知星座';
}

// 获取随机运势
function getRandomFortune(zodiacSign) {
  const messages = fortuneMessages[zodiacSign];
  if (messages && messages.length > 0) {
    const randomIndex = Math.floor(Math.random() * messages.length);
    return messages[randomIndex];
  }
  return '今天是美好的一天！';
}

// API路由
app.post('/api/horoscope', (req, res) => {
  try {
    const { name, birthday } = req.body;
    
    if (!name || !birthday) {
      return res.status(400).json({
        success: false,
        message: '请提供姓名和生日'
      });
    }
    
    // 验证生日格式
    if (!moment(birthday).isValid()) {
      return res.status(400).json({
        success: false,
        message: '生日格式不正确'
      });
    }
    
    const zodiacSign = getZodiacSign(birthday);
    const fortune = getRandomFortune(zodiacSign);
    const greeting = `您好 ${name}，您的星座是${zodiacSign}，今天的运势：${fortune}`;
    
    res.json({
      success: true,
      data: {
        name,
        birthday,
        zodiacSign,
        fortune,
        greeting
      }
    });
    
  } catch (error) {
    console.error('Error:', error);
    res.status(500).json({
      success: false,
      message: '服务器错误'
    });
  }
});

// 健康检查
app.get('/api/health', (req, res) => {
  res.json({ status: 'OK', timestamp: new Date().toISOString() });
});

app.listen(PORT, () => {
  console.log(`星座运势后端服务启动成功，端口: ${PORT}`);
}); 